Skip to content

[Feature] AsyncStream 및 로컬 캐싱 적용을 통한 지출 내역 로딩 개선#47

Merged
Peter1119 merged 8 commits intomainfrom
feature/load_cached_data
Dec 10, 2025
Merged

[Feature] AsyncStream 및 로컬 캐싱 적용을 통한 지출 내역 로딩 개선#47
Peter1119 merged 8 commits intomainfrom
feature/load_cached_data

Conversation

@Peter1119
Copy link
Contributor

🔗 관련 이슈

  • 관련 이슈: #

✨ 작업 내용

  • 지출 내역 로컬 캐싱 구현: ExpenseLocalDataSourceExpenseCache를 추가하여 이미 불러온 지출 내역을 로컬에 저장합니다.
  • Repository 리팩토링: ExpenseRepository가 이제 AsyncStream을 반환하며, 캐시된 데이터를 즉시 방출하고 네트워크 응답 후 최신 데이터를 다시 방출합니다.
  • 데이터 흐름 개선: SettlementFeatureExpenseListFeature가 캐싱된 데이터를 활용하도록 로직을 수정했습니다.
  • 날짜 처리 로직 개선: ExpenseListFeature에서 직접 날짜를 관리하는 대신 Travel 객체의 날짜를 참조하도록 구조를 단순화했습니다.
  • UI/UX 개선: 지출 생성/수정/삭제 시 토스트 메시지 문구를 자연스럽게 수정하고, 정산 화면 진입 시 데이터 로드 시점을 onAppear로 변경했습니다.
  • 네트워크 로깅: Moya Provider에 상세 로깅 설정을 추가했습니다.

📸 Showcase

변경 전 변경 후
- (스크린샷이 있다면 여기에 첨부)

📌 내부 로직 및 캐싱 위주의 작업이라 주요 UI 변경은 없습니다.


📝 참고 사항

  • 캐싱 전략: 화면 진입 시 로컬 캐시가 있다면 즉시 보여주고(Yield Cache), 동시에 백그라운드에서 네트워크 요청을 수행하여 성공 시 최신 데이터로 업데이트(Yield Remote & Update Cache)하는 방식을 적용했습니다.

Motivation 🥳 (코드를 추가/변경하게 된 이유)

  • 사용자가 정산 탭에 진입할 때마다 로딩을 기다리는 경험을 개선하기 위해 로컬 캐싱을 도입했습니다.
  • 이전 진입 시 저장된 데이터를 먼저 보여주어 앱이 더 빠르고 반응성 있게 느껴지도록 만들었습니다.

Key Changes 🔥 (주요 구현/변경 사항)

  • ExpenseLocalDataSource, ExpenseCache: 파일 기반의 간단한 캐싱 저장소 구현
  • ExpenseRepository: AsyncStream<Result<[Expense], Error>> 반환 형태로 변경하여 스트림 방식의 데이터 전달 구현
  • SettlementFeature: Repository 변경에 맞춰 데이터 바인딩 로직 수정
  • ExpenseListFeature: Computed Property를 활용해 날짜 데이터의 정합성 보장

To Reviewers 🙏 (리뷰어에게 전달하고 싶은 말)

  • AsyncStream을 활용한 캐싱 처리 흐름이 적절한지 확인 부탁드립니다.
  • 데이터 소스 분리(Remote/Local) 구조에 대해 의견 주시면 감사하겠습니다.

Reference 🔗

Close Issues 🔒 (닫을 Issue)

Close #No.

Checklist

  • 브랜치를 가져와 작업한 경우 이전 브랜치에 PR을 보냈는지 확인
  • 빌드를 위해 SceneDelegate 수정한 것 PR로 올리지 않았는지 확인
  • 필요없는 주석, 프린트문 제거했는지 확인
  • 컨벤션 지켰는지 확인
  • final, private 제대로 넣었는지 확인
  • 다양한 디바이스에 레이아웃이 대응되는지 확인
    • iPhone SE
    • iPhone 13
    • iPhone 13 Pro Max

@Peter1119 Peter1119 self-assigned this Dec 10, 2025
@Peter1119 Peter1119 added ♻️ 리팩토링 기존 코드 리팩토링 ✨ 기능추가 새로운 기능 추가 labels Dec 10, 2025
Copy link
Contributor

@Roy-wonji Roy-wonji left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Peter1119 수고 하셨습니다

Copy link
Contributor

@minneee minneee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다!

@Peter1119 Peter1119 merged commit 47fdac8 into main Dec 10, 2025
1 check passed
@Peter1119 Peter1119 deleted the feature/load_cached_data branch December 10, 2025 06:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

♻️ 리팩토링 기존 코드 리팩토링 ✨ 기능추가 새로운 기능 추가

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants